zapis do souboru z vice aplikaci ve stejnou dobu
Otázka od: david.kopecek@hacktrack.com
5. 5. 2004 11:17
Zdravim konferenci
pred casem jsem tu resil zapis do souboru v jedne multithreadove
aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
podobny problem kdyz potrebuji aby se souborem pracovalo vice
aplikaci.
Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
stejnou dobu pristoupi dve aplikace a padne to s errorem.
premyslel jsem nad nejakym zamkem nad souborem ale napadlo me jedine
si data nacist do TStringLIst a pak soubor zamknout
pres filestream
ff:=TFileStream.Create('d:\temp\test.txt',fmOpenWrite or
fmShareExclusive);
pote az bude komplet ho odemknout a ihned ulozit.. jenze zda se mi to
trapne a je tu dvojnasobna alokace pameti
--
S pozdravem a diky
David
Odpovedá: Karel Rys
5. 5. 2004 11:04
david.kopecek@hacktrack.com dne 5 May 2004 v 11:41:
> Zdravim konferenci
>
> pred casem jsem tu resil zapis do souboru v jedne multithreadove
> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
> podobny problem kdyz potrebuji aby se souborem pracovalo vice
> aplikaci.
Ahoj,
nestacilo by proste, aby kdyz aplikace zapisuje, zkusila soubor otevrit
exkluzivne, a pokud se
nepodari, zkusila to jeste parkrat s nejakym casovym odstupem? Pokud je zapis
kratky a rychly...
Karel Rys
Odpovedá: Tomas Emresz
5. 5. 2004 12:06
dkhc> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
A co Mutexy ? Ty snad jsou v ramci serveru, ne v ramci aplikace.
S uspechem je pouzivam na txt logy webovskejch CGI aplikaci..
Koukni na fce :
CreateMutex
WaitForSingleObject
--
S pozdravem,
Tomas Emresz
mailto:tomas@emresz.com
Odpovedá: martin.ben@ge.com
5. 5. 2004 11:38
Misto kriticke sekce by jsi mohl pouzit mutexy nebo semafory
Martin Ben
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On Behalf
Of david.kopecek@hacktrack.com
pred casem jsem tu resil zapis do souboru v jedne multithreadove
aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
podobny problem kdyz potrebuji aby se souborem pracovalo vice
aplikaci.
Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
stejnou dobu pristoupi dve aplikace a padne to s errorem.
premyslel jsem nad nejakym zamkem nad souborem ale napadlo me jedine
si data nacist do TStringLIst a pak soubor zamknout
pres filestream
ff:=TFileStream.Create('d:\temp\test.txt',fmOpenWrite or
fmShareExclusive);
pote az bude komplet ho odemknout a ihned ulozit.. jenze zda se mi to
trapne a je tu dvojnasobna alokace pameti
Odpovedá: Lukas Barton
5. 5. 2004 12:12
Zkus pouzit pojmenovane mutexy. Funguji napric operacnim systemem.
> Zdravim konferenci
>
> pred casem jsem tu resil zapis do souboru v jedne multithreadove
> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
> podobny problem kdyz potrebuji aby se souborem pracovalo vice
> aplikaci.
>
> Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
> stejnou dobu pristoupi dve aplikace a padne to s errorem.
>
> premyslel jsem nad nejakym zamkem nad souborem ale napadlo me jedine
> si data nacist do TStringLIst a pak soubor zamknout
>
> pres filestream
> ff:=TFileStream.Create('d:\temp\test.txt',fmOpenWrite or
fmShareExclusive);
>
> pote az bude komplet ho odemknout a ihned ulozit.. jenze zda se mi to
> trapne a je tu dvojnasobna alokace pameti
>
> --
> S pozdravem a diky
> David
Odpovedá: Karel Rys
5. 5. 2004 12:15
Lukas Barton dne 5 May 2004 v 12:29:
> Zkus pouzit pojmenovane mutexy. Funguji napric operacnim systemem.
Ale bude problem, jakmile do toho souboru budou zapisovat z ruznych stanic, ne?
I kdyz to puvodni
tazatel myslim nezminoval.
Karel Rys
Odpovedá: david.kopecek@hacktrack.com
5. 5. 2004 13:04
Dobry den,
Wednesday, May 05, 2004, 11:43:38 AM, napsal jste:
KR> david.kopecek@hacktrack.com dne 5 May 2004 v 11:41:
>> Zdravim konferenci
>>
>> pred casem jsem tu resil zapis do souboru v jedne multithreadove
>> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
>> podobny problem kdyz potrebuji aby se souborem pracovalo vice
>> aplikaci.
KR> Ahoj,
KR> nestacilo by proste, aby kdyz aplikace zapisuje, zkusila
KR> soubor otevrit exkluzivne, a pokud se
KR> nepodari, zkusila to jeste parkrat s nejakym casovym
KR> odstupem? Pokud je zapis kratky a rychly...
No tak to mam tedka reseno.
--
S pozdravem,
david
david.kopecek@hacktrack.com
Odpovedá: david.kopecek@hacktrack.com
5. 5. 2004 13:06
Dobry den,
Wednesday, May 05, 2004, 12:19:42 PM, napsal jste:
dkhc>> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
TE> A co Mutexy ? Ty snad jsou v ramci serveru, ne v ramci aplikace.
TE> S uspechem je pouzivam na txt logy webovskejch CGI aplikaci..
TE> Koukni na fce :
TE> CreateMutex
TE> WaitForSingleObject
Mutexy ja to potrebuji prave v ramci ruznych aplikaci na jednom stroji
--
S pozdravem,
david
david.kopecek@hacktrack.com
Odpovedá: david.kopecek@hacktrack.com
5. 5. 2004 12:21
Zdravim
mbgc> Misto kriticke sekce by jsi mohl pouzit mutexy nebo semafory
hmmm nemas nejakej odkaz na kus kodu a nebo prakticke pouziti
David
Odpovedá: david.kopecek@hacktrack.com
5. 5. 2004 12:56
Cau
LB> Zkus pouzit pojmenovane mutexy. Funguji napric operacnim systemem.
ano tenhle vyraz jsem tu slysel mockrat ale nikdo mi noskytl zadnej
example. zatim hledam v helpu
>> Zdravim konferenci
>>
>> pred casem jsem tu resil zapis do souboru v jedne multithreadove
>> aplikaci vyresil jsem to pres tridu TCriticalSection jenze jak vyresit
>> podobny problem kdyz potrebuji aby se souborem pracovalo vice
>> aplikaci.
>>
>> Cely projekt obsahuje nekolik souboru a muze se skratka stat ze ve
>> stejnou dobu pristoupi dve aplikace a padne to s errorem.
>>
--
S pozdravem,
david
david.kopecek@hacktrack.com
Odpovedá: david.kopecek@hacktrack.com
5. 5. 2004 12:44
zDRAVIM
mbgc> Misto kriticke sekce by jsi mohl pouzit mutexy nebo semafory
uz jsem to nasel a uz to i chapu
MutexHandle := CreateMutex(nil, TRUE, 'MysampleAppMutex');
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
// -== set hPrevInst property and close the mutex handle ==-
begin
MessageBox(0,
'Instance of this application is already running.',
'Application already running', mb_IconHand);
--
S pozdravem,
david
david.kopecek@hacktrack.com
Odpovedá: Tomas Emresz
5. 5. 2004 13:38
TE>> A co Mutexy ? Ty snad jsou v ramci serveru, ne v ramci aplikace.
TE>> S uspechem je pouzivam na txt logy webovskejch CGI aplikaci..
TE>> Koukni na fce :
TE>> CreateMutex
TE>> WaitForSingleObject
dkhc> Mutexy ja to potrebuji prave v ramci ruznych aplikaci na jednom stroji
Vzdyt jo createmutexu predas jmeno mutexu a ten je definovan v ramci
celeho stroje, tzn ruzny app nevadi, pokud obe maj stejny jmeno
mutexu, nebude to kolidovat...
--
S pozdravem,
Tomas Emresz
mailto:tomas@emresz.com